<template>
  <div class="calc-guide">
    <h2>计算说明</h2>

    <section>
      <h3>一、分组口径</h3>
      <ul>
        <li>原子分组：记录日期 + 生产线 + 订单号 + 物料编码</li>
        <li>总分组：按上述原子分组在周期内聚合后的项数</li>
        <li>有效分组：目标PPH(target_pph) > 0 且可计算效率的分组</li>
      </ul>
    </section>

    <section>
      <h3>二、核心计算字段</h3>
      <ul>
        <li>实际PPH(calculated_pph) = 总产量 ÷ (净工作时间/60 × 平均总人数)</li>
        <li>效率达成率(efficiency_rate) = 实际PPH ÷ 目标PPH × 100%</li>
        <li>覆盖率(coverage) = 有效分组 ÷ 总分组 × 100%</li>
        <li>达标率(pass_rate) = 达标分组数(效率达成率 ≥ 阈值) ÷ 有效分组 × 100%</li>
        <li>平均达成率(avg_efficiency) = 有效分组内效率达成率的算术平均</li>
      </ul>
    </section>

    <section>
      <h3>三、时间粒度与周期</h3>
      <ul>
        <li>支持：周 / 月 / 年</li>
        <li>周：按自然周（周一至周日）
        </li>
        <li>月：自然月第一天至最后一天；年：1月1日至12月31日</li>
      </ul>
    </section>

    <section>
      <h3>四、口径与筛选</h3>
      <ul>
        <li>口径切换：达标率(阈值) | 平均达成率(无阈值)</li>
        <li>生产线多选：在“按生产线”维度下可多选、可TopN/BottomN对比</li>
        <li>阈值：仅在“达标率(阈值)”下生效</li>
      </ul>
    </section>

    <section>
      <h3>五、导出</h3>
      <ul>
        <li>达标率分析导出：/api/reports/efficiency-analysis/export（XLSX）</li>
        <li>PPH汇总/异常汇总：在对应页面点击“导出”</li>
      </ul>
    </section>
    <section>
      <h3>六、PPH平均值与自动重算</h3>
      <ul>
        <li>平均PPH（记录层）：同“记录日期+生产线+订单号+物料编码”的分组内，实际PPH的算术平均（保留两位小数）。</li>
        <li>自动重算：每天 12:00 与 19:00 执行最近7天增量更新；任务串行，避免并发。</li>
        <li>状态查询：GET /api/pph/scheduler/status 返回 isRunning、lastUpdateTime、updateRange、nextSchedule。</li>
      </ul>
    </section>

    <section>
      <h3>七、预估值自动计算（每月月初）</h3>
      <ul>
        <li>策略：每日 02:00 检查，仅当当月1日且当日未执行过时触发一次自动生成当月预估值。</li>
        <li>一致性：服务启动时也会检查当月是否已生成，若未生成则触发一次，具备去重保护。</li>
        <li>口径：按“物料编码 + 生产线”维度取 pph_estimates 中 updated_at 最新一条作为当月基准。</li>
      </ul>
    </section>


    <section>
      <h3>六、字段中文对照（pph_records 表）</h3>
      <p>下表为数据库表 pph_records 的字段对照（列名 → 中文释义）。单位：net_working_minutes/abnormal_loss_minutes/break_minutes/changeover_minutes 为“分钟”；actual_takt_seconds 为“秒”。</p>
      <ul>
        <li>id → 主键ID</li>
        <li>record_date → 记录日期</li>
        <li>target_record_date → 目标口径日期</li>
        <li>line_name → 生产线</li>
        <li>order_number → 订单号</li>
        <li>material_code → 物料编码</li>
        <li>product_name → 产品名称</li>
        <li>product_series → 产品系列</li>
        <li>demand_category → 需求类别</li>
        <li>customer_number → 客户编号</li>
        <li>start_time → 开始时间</li>
        <li>end_time → 结束时间</li>
        <li>order_quantity → 订单数量</li>
        <li>inbound_quantity → 入库数量</li>
        <li>completed_total_quantity → 累计完成量</li>
        <li>to_complete_quantity → 待完成数量</li>
        <li>quantity → 本次产量</li>
        <li>total_people → 总人数</li>
        <li>working_people → 上线人数</li>
        <li>offline_staff → 线外支援人数</li>
        <li>abnormal_loss_minutes → 异常损失分钟</li>
        <li>break_minutes → 休息分钟</li>
        <li>changeover_minutes → 换型分钟</li>
        <li>belt_speed → 皮带速度</li>
        <li>calculated_pph → 实际PPH</li>
        <li>average_pph → 平均PPH</li>
        <li>target_pph → 目标PPH</li>
        <li>estimate_pph → 预估PPH</li>
        <li>efficiency_rate → 效率达成率</li>
        <li>net_working_minutes → 净工作分钟</li>
        <li>actual_takt_seconds → 实际节拍（秒）</li>
        <li>abnormality_category → 异常类别</li>
        <li>abnormality_closed → 异常已关闭(0/1)</li>
        <li>abnormality_description → 异常描述</li>
        <li>is_standard_operating → 是否标准作业(0/1)</li>
        <li>is_non_main_product → 是否非主机产品(0/1)</li>
        <li>is_whole_machine → 是否整机(0/1)</li>
        <li>created_at → 创建时间</li>
        <li>updated_at → 更新时间</li>
        <li>created_by → 创建人</li>
        <li>sync_status → 同步状态</li>
        <li>downtime_reason → 停机原因</li>
      </ul>
      <p>核对表结构：在部署包根目录可运行 <code>node app/backend/check-table-structure.cjs</code> 或 <code>node app/backend/scripts/list-pph-records-columns.cjs</code> 查看当前表结构与类型。</p>
    </section>

    <section>
      <h3>七、常见问题</h3>
      <ul>
        <li>看不到最新页面/控件：清除浏览器缓存或在地址后加 ?v=ts；PWA 下可在 DevTools - Application - Service Workers 中 Unregister 后刷新</li>
        <li>导出为空：请先点击“查询”并确认当前筛选下有数据</li>
      </ul>
    </section>
  </div>
</template>

<script setup lang="ts">
</script>

<style scoped>
.calc-guide { padding: 16px; }
h2 { margin-bottom: 12px; }
section { margin: 14px 0; }
h3 { margin: 8px 0; color: #409eff; }
ul { padding-left: 18px; }
</style>

